<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8" >

<title>关于语义明确的方法需要一个参数的讨论 | 没想好的个人博客</title>

<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">

<!-- <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css" integrity="sha384-fnmOCqbTlWIlj8LyTjo7mOUStjsKC4pOpQbqyi7RrhN7udi9RwhKkMHpvLbHG9Sr" crossorigin="anonymous"> -->
   <!-- Font Awesome CSS-->
   <link href="https://cdn.bootcss.com/font-awesome/5.13.0/css/all.css" rel="stylesheet">

   <link rel="stylesheet" href="https://cdn.bootcss.com/font-awesome/5.7.2/css/all.min.css" integrity="sha384-fnmOCqbTlWIlj8LyTjo7mOUStjsKC4pOpQbqyi7RrhN7udi9RwhKkMHpvLbHG9Sr" crossorigin="anonymous">

<link rel="shortcut icon" href="https://shixixiyue.gitee.io//favicon.ico?v=1709791195950">
<link rel="stylesheet" href="https://shixixiyue.gitee.io//styles/main.css">



<link rel="stylesheet" href="https://unpkg.com/aos@next/dist/aos.css" />
<script src="https://jsd.onmicrosoft.cn/npm/vue/dist/vue.js"></script>


<style>
  .hljs-ln{
    padding-bottom: 1.2rem;
    margin: 0rem !important;
  }
  .hljs-ln td {
    border: none !important;
    padding: 2px 6px !important;
    line-height: 1.2rem;
    font-size: 1rem;
  }
  .hljs-ln tr td:first-child  {
    color: cadetblue;
    border-right: 1px solid !important;
  }
  .hljs-ln tr {
    border: none !important;
  }
</style>

    <meta name="description" content="在创建一个方法的时候，有时候会遇见这样的情况，比如 方法 setEnabled ，字面意思是可用，或者启用；但是往往会加一个参数 bool 来判断 是否启用；这里我一直以为是多此一举


在创建一个方法的时候，有时候会遇见这样的情况，比如 ..." />
    <meta name="keywords" content=".Net Core" />
  </head>
  <body>
    <div id="app" class="main">

      <div class="sidebar" :class="{ 'full-height': menuVisible }">
  <div class="top-container" data-aos="fade-right">
    <div class="top-header-container">
      <a class="site-title-container" href="https://shixixiyue.gitee.io/">
        <img src="https://shixixiyue.gitee.io//images/avatar.png?v=1709791195950" class="site-logo">
        <h1 class="site-title">没想好的个人博客</h1>
      </a>
      <div class="menu-btn" @click="menuVisible = !menuVisible">
        <div class="line"></div>
      </div>
    </div>
    <div>
      
        
          <a href="https://shixixiyue.gitee.io/" class="site-nav">
            首页
          </a>
        
      
        
          <a href="https://shixixiyue.gitee.io//tag/4gOKry8Qv/" class="site-nav">
            .Net Core
          </a>
        
      
        
          <a href="https://shixixiyue.gitee.io//tag/njETBpqXu/" class="site-nav">
            FineUICore
          </a>
        
      
        
          <a href="https://shixixiyue.gitee.io//tag/XyXyeLOBB" class="site-nav">
            读书笔记
          </a>
        
      
        
          <a href="https://shixixiyue.gitee.io//tag/TyVX6hfCJ" class="site-nav">
            Vue笔记
          </a>
        
      
        
          <a href="https://shixixiyue.gitee.io//tag/3Hz2sPtzO/" class="site-nav">
            产品
          </a>
        
      
        
          <a href="https://shixixiyue.gitee.io//tag/Db1wShB_E" class="site-nav">
            其他
          </a>
        
      
        
          <a href="https://shixixiyue.gitee.io/" class="site-nav">
            一一一一一一一一一
          </a>
        
      
        
          <a href="https://shixixiyue.gitee.io//archives" class="site-nav">
            文章归档
          </a>
        
      
        
          <a href="https://shixixiyue.gitee.io//tags" class="site-nav">
            全部标签
          </a>
        
      
    </div>
  </div>
  <div class="bottom-container" data-aos="flip-up" data-aos-offset="0">
    <div class="social-container">
      
        
      
        
      
        
      
        
      
        
      
    </div>
    <div class="site-description">
      没事啥都说
    </div>
    <div class="site-footer">
      QQ：<a href="tencent://message/?uin=935732994&Site=''&Menu=yes">935732994<a/> <a href="http://beian.miit.gov.cn">京ICP备2024045283号<a/> | <a class="rss" href="https://shixixiyue.gitee.io//atom.xml" target="_blank">RSS</a>
    </div>
  </div>
</div>


      <div class="main-container">
        <div class="content-container" data-aos="fade-up">
          <div class="post-detail">
            <h2 class="post-title">关于语义明确的方法需要一个参数的讨论</h2>
            <div class="post-date">2023-05-18
            
                
                  <a href="https://shixixiyue.gitee.io/tag/4gOKry8Qv/" class="tag">
                    .Net Core
                  </a>
                
            </div>
            
            <div class="post-content" v-pre>
              <p>在创建一个方法的时候，有时候会遇见这样的情况，比如 方法 setEnabled ，字面意思是可用，或者启用；但是往往会加一个参数 bool 来判断 是否启用；这里我一直以为是多此一举</p>
<!-- more -->
<p><br>
在创建一个方法的时候，有时候会遇见这样的情况，比如 方法 setEnabled ，字面意思是可用，或者启用</p>
<pre><code>public static CheckBoxListExtension setEnabled(this CheckBoxListExtension f)
{
   ...
   return f;
}
</code></pre>
<p>但是往往会加一个参数 bool 来判断 是否启用</p>
<pre><code>public static CheckBoxListExtension setEnabled(this CheckBoxListExtension f，bool isEnabled)
{
   if(isEnabled)
   {
       ...
   }
   return f;
}
</code></pre>
<p>这里我一直以为是多此一举，既然 setEnabled 本身就是设置启用，那为什么还要传一个bool呢，在调用时 <code>checkbox1.setEnabled(false);</code>并没有什么意义，如果传false，我直接把这行注释掉就可以了，即使 需要判断 那我写成</p>
<pre><code>if(isEnabled) checkbox1.setEnabled();
</code></pre>
<p>也可以，难道就为了省下一个 if 么？</p>
<hr>
<p><strong><code>其实就是为了省一个if</code></strong></p>
<hr>
<p>其实这里的使用场景就是满足 <code>链式调用（瀑布式调用）</code>  或者高大上叫 <code>FluentAPI 设计模式</code> ，</p>
<p>像这样</p>
<pre><code>checkbox1.setText(&quot;&quot;).setEnabled().setValue(&quot;&quot;).SelectOnly();
</code></pre>
<p>这时如果setEnabled没有接参 而需要if判断时，代码就断开了</p>
<pre><code>checkbox1.setText(&quot;&quot;);
if(isEnabled) checkbox1.setEnabled()
checkbox1.setValue(&quot;&quot;);
if(isSelectOnly) checkbox1.SelectOnly();
</code></pre>
<p>为了提高可读性可维护性 所以使用接参的写法</p>
<pre><code>checkbox1.setText(&quot;&quot;).setEnabled(isEnabled).setValue(&quot;&quot;).SelectOnly(isSelectOnly);
</code></pre>
<p>所以大家在写这种自引用方法的时候，应该根据场景增加参数，让方法本身<code>失去意义 </code></p>

            </div>
            
              <div class="tag-container">
                
                  <a href="https://shixixiyue.gitee.io/tag/4gOKry8Qv/" class="tag">
                    .Net Core
                  </a>
                
              </div>
            
            
              <div class="next-post">
                <div class="next">下一篇</div>
                <a href="https://shixixiyue.gitee.io/netcore-xiang-mu-signalr-huo-qu-ke-hu-duan-xin-xi-de-ce-shi/">
                  <h3 class="post-title">
                    .NetCore项目SignalR获取客户端信息的测试
                  </h3>
                </a>
              </div>
            

            

          </div>

        </div>
      </div>
    </div>

    <script src="https://unpkg.com/aos@next/dist/aos.js"></script>
<script type="application/javascript">

AOS.init();

var app = new Vue({
  el: '#app',
  data: {
    menuVisible: false,
  },
})

</script>


  <script src="//jsd.onmicrosoft.cn/gh/highlightjs/cdn-release@11.5.1/build/highlight.min.js"></script>
  <script>
    hljs.initHighlightingOnLoad();
    //hljs.registerLanguage('mermaid', window.hljsDefineMermaid);
  </script>
  <script src="//jsd.onmicrosoft.cn/npm/highlightjs-line-numbers.js@2.8.0/dist/highlightjs-line-numbers.min.js"></script>
  <script>
    hljs.initLineNumbersOnLoad({
      singleLine: true
    });
  </script>
 <script src="https://jsd.onmicrosoft.cn/npm/mermaid/dist/mermaid.min.js"></script>
   <script>
    mermaid.initialize({
      startOnLoad: true,
      securityLevel: 'loose',
    });
  </script>





  </body>
</html>
